home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / ArcBrowse.rexx < prev    next >
OS/2 REXX Batch file  |  1994-11-18  |  9KB  |  351 lines

  1. /* $VER: ArcBrowse.rexx 8.3 (18.11.94)
  2. ⌐ 1990-94 Richard Lee Stockton - FREELY DISTRIBUTABLE
  3. archives user defined browselist into file in users email it receives
  4. its arguments from rexxDoors/Make_BrowseList.rexx or bbsQUICKOUT.rexx
  5. */
  6.  
  7. CALL TIME('R')
  8.  
  9. SIGNAL ON ERROR
  10. SIGNAL ON SYNTAX
  11. SIGNAL ON BREAK_C
  12. OPTIONS FAILAT 999999
  13.  
  14. PARSE ARG name lastbrowse alphaflag libflag liblist 
  15. lastbrowse=STRIP(lastbrowse)
  16.  
  17. IF ~DATATYPE(lastbrowse,'N') | name='' | alphaflag='' | libflag='' | liblist='' THEN
  18.   CALL GETOUT(20)
  19.  
  20. figarg='s:CONFIG.BBS'
  21. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  22. x=OPEN(f,figarg,'R')
  23. IF x=0 THEN
  24.   DO
  25.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  26.     CALL GETOUT(21)
  27.   END
  28. lynes.=''
  29. DO i=1 TO 33
  30.   lynes.i=READLN(f)
  31. END
  32. CALL CLOSE(f)
  33.  
  34. compos=POS('/*',lynes.1)
  35. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  36. bbsname = STRIP(lynes.1)
  37.  
  38. sysop   = WORD(lynes.2,1)
  39.  
  40. bbspath = WORD(lynes.6,1)
  41. IF ~EXISTS(bbspath) THEN
  42.   DO
  43.     SAY bbspath 'does not exist!'
  44.     CALL GETOUT(22)
  45.   END
  46. testchar=RIGHT(bbspath,1)
  47. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  48. IF WORD(lynes.25,1)=1 THEN scratch=bbspath'Scratch'
  49. ELSE scratch='RAM:Scratch'
  50.  
  51. DO i=1
  52.   IF GETCLIP('BBS_BROWSE'i)='' THEN  /* info clip for external STOP */
  53.     DO
  54.       CALL SETCLIP('BBS_BROWSE'i,name)
  55.       CALL SETCLIP('BBS_STOP_BROWSE'i)
  56.       clipnum=i
  57.       LEAVE i
  58.     END
  59. END
  60.  
  61. CALL CLOSE(STDOUT)
  62. CALL OPEN(STDOUT,scratch'/ArcBrowse.'clipnum,'W')
  63. SAY STRIP(SUBSTR(SOURCELINE(1),3))
  64. SAY
  65.  
  66. CALL PRAGMA('P',-4)         /* lower the priority of this task */
  67.  
  68. extension=WORD(lynes.32,1)
  69. compos=POS('/*',lynes.33)
  70. IF compos>0 THEN lynes.33=LEFT(lynes.33,compos-1)
  71. arccom=STRIP(lynes.33)
  72. IF LEFT(extension,1)~='.' THEN
  73.   DO
  74.     extension='.lzh'
  75.     arccom='lha -m m'
  76.   END
  77.  
  78. filepath=bbspath'EmailFiles/'name
  79. CALL MAKEDIR(filepath)
  80. IF GETCLIP('BBS_'name)~='' THEN browsename=filepath'/FileList'
  81. ELSE
  82.   DO
  83.     x=OPEN(f,bbspath'Numbers/LastMail','R')
  84.     IF x=0 THEN
  85.       DO
  86.         CALL DELAY(100)
  87.         x=OPEN(f,bbspath'Numbers/LastMail','R')
  88.       END
  89.     IF x=0 THEN lastm=1
  90.     ELSE lastm=READLN(f)+1
  91.     CALL CLOSE(f)
  92.     ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastMail 'lastm
  93.     browsename=filepath'/BBBBS_'lastm
  94.   END
  95. filelist.=''
  96. IF ~listOPEN(c,bbspath'Lists/Files','R') THEN CALL GETOUT(23)
  97. DO i=1
  98.   line=READLN(c)
  99.   IF EOF(c) THEN LEAVE i
  100.   indx=WORD(line,1)
  101.   IF ~DATATYPE(indx,'W') THEN ITERATE i
  102.   IF indx<=lastbrowse THEN ITERATE i
  103.   filelist.indx=line
  104. END
  105. CALL CLOSE(c)
  106. lastfile=indx
  107. IF OPEN(c,bbspath'Numbers/LastFile','R')~=0 THEN
  108.   DO
  109.     lastfile=READLN(c)
  110.     CALL CLOSE(c)
  111.   END
  112. oldt=0
  113. count=0
  114. archives=1
  115. CALL open_browse()
  116.  
  117. IF libflag='A' THEN CALL noteloop(1)
  118. ELSE IF libflag='L' THEN
  119.   DO j=1 TO WORDS(liblist)
  120.     test1=WORD(liblist,j)
  121.     CALL noteloop(0)
  122.   END
  123.  
  124. IF WORD(STATEF(browsename),2)<80 THEN CALL GETOUT(26)
  125. IF GETCLIP('BBS_'name)~='' THEN CALL GETOUT(0)
  126. CALL write_msg()
  127. CALL GETOUT(0)
  128. EXIT
  129.  
  130.  
  131.  
  132. add_note:
  133. ARG addname
  134. count=count+1
  135. IF count//5=0 THEN
  136.   DO
  137.     t=GETCLIP('BBS_STOP_BROWSE'clipnum)
  138.     IF t~='' THEN CALL cleanup(t)
  139.   END
  140. finfo=STATEF(browsename)
  141. IF WORD(finfo,2)>1400000 THEN
  142.   DO
  143.     x=OPEN(a,browsename,'A')
  144.     IF x=0 THEN CALL GETOUT(33)
  145.     CALL WRITELN(a,'')
  146.     CALL WRITELN(a,CENTER('=== continued in part' archives+1'. ===',75))
  147.     CALL CLOSE(a)
  148.     CALL DELAY(50)
  149.     IF GETCLIP('BBS_'name)~='' THEN
  150.       DO
  151.         IF EXISTS('FileList') THEN CALL RENAME('FileList','List1')
  152.         browsename=filepath'/List'archives+1
  153.       END
  154.     ELSE
  155.       DO
  156.         CALL write_msg()
  157.         x=OPEN(f,bbspath'Numbers/LastMail','R')
  158.         IF x~=0 THEN lastm=READLN(f)+1
  159.         ELSE lastm=lastm+1
  160.         CALL CLOSE(f)
  161.         ADDRESS COMMAND 'echo >'bbspath'Numbers/LastMail 'lastm
  162.         browsename=filepath'/BBBBS_'lastm
  163.       END
  164.     archives=archives+1
  165.     CALL open_browse()
  166.   END
  167. x=OPEN(a,browsename,'A')
  168. IF x=0 THEN CALL GETOUT(30)
  169. CALL WRITELN(a,'=====')
  170. x=OPEN(b,addname,'R')
  171. IF x=0 THEN CALL WRITELN(a,addname 'failed to open for reading!')
  172. ELSE
  173.   DO
  174.     data=READCH(b,65000)
  175.     CALL CLOSE(b)
  176.     CALL WRITECH(a,data)
  177.   END
  178. CALL WRITELN(a,'')
  179. CALL CLOSE(a)
  180. RETURN
  181.  
  182.  
  183. write_msg:
  184. IF GETCLIP('BBS_'name)~='' THEN RETURN
  185. CALL PRAGMA('P',0)         /* normal priority */
  186. ADDRESS COMMAND arccom browsename||extension browsename
  187. IF ~EXISTS(browsename||extension) THEN CALL GETOUT(27)
  188. CALL PRAGMA('P',-4)
  189. x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  190. IF x=0 THEN CALL GETOUT(28)
  191. CALL WRITELN(f,' Mail: 'lastm'   FILE: BBBBS_'lastm||extension)
  192. CALL WRITELN(f,' From: BBBBS')
  193. CALL WRITELN(f,'   To: 'name)
  194. temp='BrowseList'
  195. IF WORD(finfo,2)>1400000 THEN temp=temp', part' archives
  196. CALL WRITELN(f,' Subj:' temp)
  197. CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  198. CALL WRITELN(f,LEFT('=',75,'='))
  199. temp='Here are the file descriptions you requested'
  200. IF WORD(finfo,2)>1400000 THEN temp=temp', part' archives
  201. CALL WRITELN(f,temp'.')
  202. t=(.5+TIME('E'))%1
  203. t=t-oldt
  204. oldt=t+oldt
  205. min=t%60
  206. hrs=min%60
  207. min=min//60
  208. sec=t//60
  209. temp='It took'
  210. IF hrs>1 THEN temp=temp hrs 'hours'
  211. ELSE IF hrs=1 THEN temp=temp '1 hour'
  212. IF min>1 THEN temp=temp min 'minutes'
  213. ELSE IF min=1 THEN temp=temp '1 minute'
  214. IF sec=1 THEN temp=temp '1 second'
  215. ELSE IF sec>0 THEN temp=temp sec 'seconds'
  216. temp=temp 'to compile these descriptions.'
  217. CALL WRITELN(f,temp)
  218. CALL CLOSE(f)
  219. newmess='Your archived filelist is waiting in Email.'
  220. IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
  221.   DO
  222.     oldmess=GETCLIP('BBS_MESSAGE')
  223.     IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
  224.     CALL SETCLIP('BBS_MESSAGE',oldmess||newmess)
  225.   END
  226. IF GETCLIP('BBS_LOCAL')=name THEN CALL SETCLIP('BBS_LOCAL_MSG',newmess)
  227. RETURN
  228.  
  229.  
  230. open_browse:
  231. x=OPEN(a,browsename,'W')
  232. IF x=0 THEN CALL GETOUT(25)
  233. IF alphaflag='A' THEN temp='alphabetical'
  234. ELSE temp='aged'
  235. title='=' bbsname temp 'file descriptions'
  236. IF libflag='L' THEN title=title 'by library'
  237. IF archives>1 THEN title=title', part' archives
  238. CALL WRITELN(a,title)
  239. CALL WRITELN(a,'= Custom archived for' name'  'DATE() TIME('C'))
  240. CALL WRITELN(a,'')
  241. CALL CLOSE(a)
  242. IF GETCLIP('BBS_'name)='' THEN
  243.   DO
  244.     x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  245.     IF x=0 THEN CALL GETOUT(28)
  246.     CALL WRITELN(f,' Mail: 'lastm'   FILE: BBBBS_'lastm)
  247.     CALL WRITELN(f,' From: BBBBS')
  248.     CALL WRITELN(f,'   To: 'name)
  249.     CALL WRITELN(f,' Subj: BrowseList')
  250.     CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  251.     CALL WRITELN(f,LEFT('=',75,'='))
  252.     CALL WRITELN(f,'Here are the file descriptions you requested.')
  253.     CALL WRITELN(f,'The collection process was interrupted.')
  254.     CALL CLOSE(f)
  255.   END
  256. RETURN
  257.  
  258.  
  259. listOPEN:
  260. PARSE ARG fh,listfile,flag
  261. DO i=0 TO 59 WHILE OPEN(fh,listfile,flag)=0
  262.   IF i//4=0 THEN SAY 'Waiting' (60-i)*5 'more seconds for' listfile 'to become available...'
  263.   CALL DELAY(250)
  264. END
  265. IF i>59 THEN
  266.   DO
  267.     SAY '*** unable to access' listfile 'list.'
  268.     RETURN 0
  269.   END
  270. RETURN 1
  271.  
  272.  
  273. noteloop:
  274. ARG nflag .
  275. IF alphaflag='A' THEN
  276.   DO
  277.     IF ~listOPEN(c,bbspath'Lists/Files.ALPHA','R') THEN GETOUT(24)
  278.     CALL CLOSE(c)
  279.     ADDRESS COMMAND 'COPY' bbspath'Lists/Files.ALPHA' bbspath'Lists/Files.ALPHA.arcbrowse'
  280.     IF ~listOPEN(c,bbspath'Lists/Files.ALPHA.arcbrowse','R') THEN GETOUT(24)
  281.     DO i=1
  282.       line=READLN(c)
  283.       IF EOF(c) THEN LEAVE i
  284.       k=WORD(line,3)
  285.       IF ~DATATYPE(k,'W') THEN ITERATE i
  286.       IF filelist.k='' | lastbrowse>=k THEN ITERATE i
  287.       lname=WORD(filelist.k,2)
  288.       fname=WORD(filelist.k,3)
  289.       IF nflag THEN
  290.         DO
  291.           IF FIND(UPPER(liblist),UPPER(lname))=0 THEN ITERATE i
  292.         END
  293.       ELSE IF UPPER(test1)~=UPPER(lname) THEN ITERATE i
  294.       CALL add_note(bbspath'FileNotes/'lname'/'fname)
  295.     END
  296.     CALL CLOSE(c)
  297.     CALL DELETE(bbspath'Lists/Files.ALPHA.arcbrowse')
  298.   END
  299. ELSE
  300.   DO i=lastfile TO lastbrowse+1 BY -1
  301.     IF filelist.i='' THEN ITERATE i
  302.     lname=WORD(filelist.i,2)
  303.     fname=WORD(filelist.i,3)
  304.     IF nflag THEN
  305.       DO
  306.         IF FIND(UPPER(liblist),UPPER(lname))=0 THEN ITERATE i
  307.       END
  308.     ELSE IF UPPER(test1)~=UPPER(lname) THEN ITERATE i
  309.     CALL add_note(bbspath'FileNotes/'lname'/'fname)
  310.   END
  311. RETURN
  312.  
  313.  
  314. cleanup:
  315. ARG t2 .
  316. SAY 'User aborted!'
  317. IF t2='DELETE' THEN
  318.   DO
  319.     IF GETCLIP('BBS_'name)~='' THEN
  320.       DO
  321.         CALL DELETE(bbspath'EmailFiles/'name'/FileList')
  322.         ADDRESS COMMAND 'c:delete' bbspath'EmailFiles/'name'/List#?'
  323.         x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'A')
  324.         IF x~=0 THEN
  325.           DO
  326.             CALL WRITELN(f,'')
  327.             CALL WRITELN(f,'*** This process aborted' DATE() 'at' TIME('C') '***')
  328.             CALL WRITELN(f,'*** No data file exists, not even a partial one. ***')
  329.             CALL CLOSE(f)
  330.           END
  331.       END
  332.     ELSE ADDRESS COMMAND 'c:delete' LEFT(browsename,LENGTH(browsename)-4)'#?'
  333.   END
  334. CALL GETOUT(0)
  335. RETURN
  336.  
  337.  
  338. ERROR:
  339. SYNTAX:
  340. BREAK_C:
  341. GETOUT:
  342. ARG errorout
  343. CALL SETCLIP('BBS_BROWSE')
  344. CALL SETCLIP('BBS_BROWSE'clipnum)
  345. CALL SETCLIP('BBS_STOP_BROWSE'clipnum)
  346. IF errorout>0 THEN SAY 'ArcBrowse error' errorout'!'
  347. EXIT(errorout)
  348.  
  349.  
  350. /* ArcBrowse.rexx */
  351.